//
// Created by hsj on 2024-1-8.
// Windows没有fork
// wait阻塞式退出进程
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifdef WIN32
//windows minGW64
//inet_ntop函数：_WIN32_WINNT
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0600
#include <winsock2.h>
#include <ws2tcpip.h>
//#pragma comment(lib,"ws2_32.lib")
#else
//linux  gcc
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/wait.h>
#endif
void error_handling(char *message);

int main(int argc, char *argv[]){
    int status;
    pid_t pid=fork();
    if(pid==0)//新子进程
        return 3;
    else {
        printf("Child PID: %d \n", pid);
        pid = fork();
        if (pid == 0) {//新子进程
            exit(7);
        } else {
            printf("Child PID: %d \n", pid);
            wait(&status);//阻塞式
            if (WIFEXITED(status))//检测退出了吗
                printf("Child send one: %d \n", WEXITSTATUS(status));//获取退出的子进程的退出码/返回值

            wait(&status);//阻塞式
            if (WIFEXITED(status))//检测退出了吗
                printf("Child send two: %d \n", WEXITSTATUS(status));//获取退出的子进程的退出码/返回值

            sleep(30); // main Sleep 30 sec.
        }
    }
    return EXIT_SUCCESS;
}

void error_handling(char *message){
    fputs (message, stderr);
    fputc('\n', stderr);
    exit(1);
}